function Case_1_result=problem_1(cnc,rgv,speed)
% 对不同组 单一工序的解决
% cnc每行存储数据 位置；工作状态；加工用时；上下料用时；预计完成时间;完成工件数量
% rgv每行存储数据 位置；工作状态；清洗用时；预计完成时间
% speed每行存储数据 一格移动；两格移动；三格移动
Case_1_result=(1:800)';
t=0;
r=1;



cnc(6,:)=-1;

while t<=28800 %八小时内循环
    
    dist=4;
    rgv_work=0;
    
    % 查找空闲cnc
    for i=1:8
        if cnc(2,i)==0
            if abs(cnc(1,i)-rgv(1))<dist
                dist=abs(cnc(1,i)-rgv(1));
                cnc_Num=i; %记录cnc序号
                value=cnc(1,i); %标记cnc位置
                step=abs(cnc(1,i)-rgv(1)); %rgv移动格子数量
            end
        end
    end
    
    % rgv移动
    if step~=0 && cnc(2,cnc_Num)==0
        t=t+speed(step);
        rgv(1)=value;
        rgv_work=1;
    end
    
    % 上下料 清洗
    if cnc(2,cnc_Num)==0 
        cnc(2,cnc_Num)=1; %更新工作状态为工作中
        rgv(2)=1;
        
        Case_1_result(r,2)=cnc_Num;
        Case_1_result(r,3)=t;
        
        t=t+cnc(4,cnc_Num); %上下料
        cnc(6,cnc_Num)=cnc(6,cnc_Num)+1; %完成一个工件
        cnc(5,cnc_Num)=t+cnc(3,cnc_Num)-1; %更新预计完成时间
        rgv_work=1;
        if cnc(5,cnc_Num)~=0 && r>8
            t=t+rgv(3); %清洗
        end
        r=r+1;
    end
    
    for i=1:8
        if t>=cnc(5,i) && cnc(5,i)~=0 %工作完毕 更新工作状态
            cnc(2,i)=0;
        end
    end
    
    % 到达位置4后 如果为空闲状态则直接返回
    if rgv_work==0 && rgv(1)==4
        t=t+speed(3);
        rgv(1)=1;
    end
    
    if rgv_work==0
        t=t+1;
    end
end


for i=1:800
    for j=i+1:800
        if Case_1_result(i,2)==Case_1_result(j,2)
            Case_1_result(i,4)=Case_1_result(j,3); %更新下料时间
            break;
        end
    end
end


end

